// utils/auth.js - 认证相关工具
const api = require('./api.js')

/**
 * 微信登录
 */
function wxLogin() {
  return new Promise((resolve, reject) => {
    wx.login({
      success: (res) => {
        if (res.code) {
          resolve(res.code)
        } else {
          reject(new Error('获取code失败'))
        }
      },
      fail: reject
    })
  })
}

/**
 * 获取用户信息
 */
function getUserProfile() {
  return new Promise((resolve, reject) => {
    wx.getUserProfile({
      desc: '用于完善用户资料',
      success: (res) => {
        resolve(res.userInfo)
      },
      fail: reject
    })
  })
}

/**
 * 获取手机号
 */
function getPhoneNumber(e) {
  return new Promise((resolve, reject) => {
    if (e.detail.errMsg === 'getPhoneNumber:ok') {
      resolve(e.detail)
    } else {
      reject(new Error('获取手机号失败'))
    }
  })
}

/**
 * 检查登录状态
 */
function checkLogin() {
  const token = wx.getStorageSync('token')
  const userInfo = wx.getStorageSync('userInfo')
  
  return !!(token && userInfo)
}

/**
 * 要求登录
 */
function requireLogin() {
  if (!checkLogin()) {
    wx.showModal({
      title: '提示',
      content: '请先登录',
      confirmText: '去登录',
      success: (res) => {
        if (res.confirm) {
          wx.navigateTo({
            url: '/pages/user/login/login'
          })
        }
      }
    })
    return false
  }
  return true
}

/**
 * 检查是否是全局管理员
 */
function isAdmin() {
  const userInfo = wx.getStorageSync('userInfo')
  return userInfo && userInfo.role === 'admin'
}

/**
 * 检查是否可以管理（全局管理员或活动创建者）
 */
function canManage(activityData) {
  const userInfo = wx.getStorageSync('userInfo')
  if (!userInfo) return false
  
  // 全局管理员
  if (userInfo.role === 'admin') return true
  
  // 活动创建者
  if (activityData && activityData.can_manage) return true
  
  return false
}

/**
 * 要求管理员权限
 */
function requireAdmin() {
  if (!isAdmin()) {
    wx.showToast({
      title: '需要管理员权限',
      icon: 'none'
    })
    return false
  }
  return true
}

module.exports = {
  wxLogin,
  getUserProfile,
  getPhoneNumber,
  checkLogin,
  requireLogin,
  isAdmin,
  canManage,
  requireAdmin
}

